package com.electromagnetic.industry.software.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.manage.pojo.models.User;
import com.electromagnetic.industry.software.manage.pojo.req.*;

import java.util.List;

public interface UserService extends IService<User> {

    /**
     * 用户登录
     *
     * @param loginRequest
     * @return
     */
    ElectromagneticResult<?> login(UserLoginRequest loginRequest);

    /**
     * 新增用户信息
     *
     * @param userRequest
     * @return
     */
    ElectromagneticResult<?> createUser(UserRequest userRequest);

    /**
     * 编辑用户信息
     *
     * @param userModiRequest
     * @return
     */
    ElectromagneticResult<?> modifyUser(UserModiRequest userModiRequest);


    /**
     * 发布用户
     *
     * @param userPublishRequest
     * @return
     */
    ElectromagneticResult<?> publishUser(UserPublishRequest userPublishRequest);

    /**
     * 校验工号唯一性
     *
     * @param workNumberRequest
     * @return
     */
    ElectromagneticResult<?> validateWorkNum(UserWorkNumRequest workNumberRequest);

    /**
     * 通过用户编码获取单条用户信息
     *
     * @param getSingleUserRequest
     * @return
     */
    ElectromagneticResult<?> getSingleUser(GetSingleUserRequest getSingleUserRequest);

    /**
     * 查询用户信息
     *
     * @param searchUserRequest
     * @return
     */
    ElectromagneticResult<?> searchUser(SearchUserRequest searchUserRequest);

    /**
     * 刪除用戶（逻辑删除）
     *
     * @param userDeleteRequest
     * @return
     */
    ElectromagneticResult<?> deleteUser(UserDeleteRequest userDeleteRequest);

    /**
     * 用户登出
     *
     * @param token
     * @return
     */
    ElectromagneticResult<?> logout(String token);

    /**
     * 人员绑定
     */
    Boolean bindRoles(List<UserBindRoleDTO> list);

    /**
     * 重置密码
     *
     * @param userId
     */
    Boolean resetPassword(String userId);

    /**
     * @param userId      用户ID
     * @param newPassword
     * @return
     */
    ElectromagneticResult<?> changePassword(String userId, String newPassword);

    /**
     * 校验原始密码是否正确
     *
     * @param userId           用户ID
     * @param oldInputPassword 输入的原始密码
     * @return 如果密码正确返回成功结果，否则返回失败结果
     */
    ElectromagneticResult<?> validateOldPassword(String userId, String oldInputPassword);
}
